<?php
/**
 * Imagem Controller. Executa ações direcionadas a imagens.
 * @author Emanuel Melo
 * @package PC4_Controlador
 */
class PC4_Controlador_Imagem extends PC4_Controlador_APP {

	public function __construct($filtros = array()) {
		parent::__construct($filtros);
	}
	
	/**
	 * Redimensiona a imagem de um caminho específico
	 * @param String $caminho - o caminho da imagem a ser redimensionada
	 * @param String $nome - o nome da imagem a ser redimensionada
	 * @param int $w - a largura final
	 * @param int $h - a altura final
	 * @param bool $prop - se a proporção deve ou não ser mantida  
	 * @param String $bgColor - a cor de preenchimento do fundo
	 */
	function size($caminho, $nome, $w, $h, $prop = true, $bgColor = "FFFFFF") {
		$caminho = FCPATH . str_replace('_', '/', $caminho);
		$pos = strrpos($nome, '_');
		if ($pos !== false) {
			$nome = substr_replace($nome, '.', $pos, 1);
		}
		$this->showImg($caminho . '/' . $nome, $w, $h, $bgColor, $prop);
	}
	
	
	/**
	 * Chama o redimensionador de imagem
	 * @param string $nome_imagem
	 * @param int $w
	 * @param int $h
	 * @param string $bgColor
	 * @param boolean $prop
	 */
	protected function showImg($nome_imagem, $w, $h, $bgColor = "FFFFFF", $prop) {
		header("Content-Type: image/png");
		imagepng($this->resize($nome_imagem, $w, $h, $bgColor, $prop));
	}
	
	/**
	 * Redimensiona a imagem
	 * @param String $nome_imagem - o caminho da imagem a ser redimensionada
	 * @param int $w - a largura final
	 * @param int $h - a altura final
	 * @param String $bgColor - a cor de preenchimento do fundo
	 * @param bool $prop - se a proporção deve ou não ser mantida  
	 */
	protected function resize($nome_imagem, $w, $h, $bgColor, $prop) {
		ini_set('gd.jpeg_ignore_warning', 1);
		$extensao = array_reverse(explode(".", $nome_imagem));
		$ext = strtolower($extensao[0]);
	
		list($w_orig, $h_orig) = getimagesize($nome_imagem);
	    $thumb = imagecreatetruecolor($w, $h);
		
		$r = hexdec(substr($bgColor, 0, 2));
		$g = hexdec(substr($bgColor, 2, 2));
		$b = hexdec(substr($bgColor, 4, 2));
		
		$cor_bg = imagecolorallocate($thumb, $r, $g, $b);
		imagefill($thumb, 0, 0, $cor_bg);
		
		switch($ext){
			case "jpg":
				$source = imagecreatefromjpeg($nome_imagem);
				break;
			case "jpeg":
				$source = imagecreatefromjpeg($nome_imagem);
				break;
			case "gif":
				$source = imagecreatefromgif($nome_imagem);
				break;
			case "png":
				$source = imagecreatefrompng($nome_imagem);
				break;
			default:
				return false;
		}
			
		if($h_orig <= $w_orig){
			$h_redim = round(($w * $h_orig) / $w_orig);
			$w_redim = $w;
			$x_d = 0;
			$y_d = round(($h - $h_redim) / 2);
		}
		else{
			$w_redim = round(($h * $w_orig) / $h_orig);
			$h_redim = $h;
			$x_d = round(($w - $w_redim) / 2);
			$y_d = 0;
		}
		if($h_redim > $h){
			$w_redim = round(($h * $w_orig) / $h_orig);
			$h_redim = $h;
			$x_d = round(($w - $w_redim) / 2);
			$y_d = 0;
		}
		if($w_redim > $w){
			$h_redim = round(($w * $h_orig) / $w_orig);
			$w_redim = $w;
			$x_d = 0;
			$y_d = round(($h - $h_redim) / 2);
		}
		
		if($prop == "true"){
			$thumb = imagecreatetruecolor($w_redim, $h_redim);
			imagefill($thumb, 0, 0, imagecolorallocate($thumb, 255, 255, 255));
			$x_d = 0;
			$y_d = 0;
		}
		imagecopyresampled($thumb, $source, $x_d, $y_d, 0, 0, $w_redim, $h_redim, $w_orig, $h_orig);
		
//		imagepng($thumb);
		return $thumb;
	}
	
}
?>